package com.yuxinyang.memory.admin.common.utils;

import java.text.SimpleDateFormat;
import java.time.Clock;
import java.time.Instant;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author Administrator 余秀良
 * @version 1.0
 * <p>date: 2019年09月06日  13:59 </p>
 * <p>address: 四川成都 </p>
 */
public class StringUtil {
    private static final AtomicInteger ATOMIC_INTEGER = new AtomicInteger(1);
    private static ThreadLocal<StringBuffer> threadLocal = new ThreadLocal<>();

    private StringUtil() {
        throw new UnsupportedOperationException("这是一个工具类不能实例化");
    }


    /**
     * @author yxl 余秀良
     * @version 1.0
     * description: 获取uuid
     * @date 2018年03月01日 下午2:20
     * address: 四川成都
     */
    public synchronized static String getUuid() {
        return UUID.randomUUID().toString().replace("-", "").trim();
    }

    /**
     * 获取长订单号
     *
     * @return 订单号
     * @author 余秀良
     * @version 1.0
     * <p>  date: 2019 - 09 - 06  16:11    </p>
     * <p>  address: 四川成都  </p>
     */
    public synchronized static String getLongOrderId() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        String time = format.format(Instant.now(Clock.systemDefaultZone()).toEpochMilli());
        StringBuffer buffer = new StringBuffer(time);
        buffer.append(Math.abs(getUuid().hashCode()));
        buffer.append(ATOMIC_INTEGER.getAndIncrement());
        threadLocal.set(buffer);
        String string = threadLocal.get().toString();
        threadLocal.remove();
        return string;
    }

    /**
     * 获取短订单号
     *
     * @return 订单号
     * @author 余秀良
     * @version 1.0
     * <p>  date: 2019 - 09 - 06  16:11    </p>
     * <p>  address: 四川成都  </p>
     */
    public synchronized static String getShortOrderId() {
        // 随机数
        StringBuffer builder = new StringBuffer(ThreadLocalRandom.current().nextInt(0, 999));
        // HASH-CODE
        builder.append(Math.abs(getUuid().hashCode()));
        // 自增顺序
        builder.append(ATOMIC_INTEGER.getAndIncrement());
        threadLocal.set(builder);
        String string = threadLocal.get().toString();
        threadLocal.remove();
        return string;
    }

    /**
     * 获取订单号  当前时间+6位随机数
     *
     * @return 返回当前时间加上随机数
     */
    public synchronized static String getOrderId() {
        //获取6位随机数
        int code = (int) ((Math.random() * 9 + 1) * 100000);
        long date = System.currentTimeMillis();
        return date + "" + code;
    }

    /**
     * 判断字符串是否是为空
     *
     * @param str 需要验证的字符串
     * @return 返回true表示字符串为空
     */
    public static boolean isEmpty(String str) {
        return str == null || "null".equals(str) || "".equals(str);
    }

    /**
     * 判断字符串不为空
     *
     * @author yxl 余秀良
     * @version 1.0
     * description: 判断字符串不为空
     * date: 2019年02月26日 上午11:20
     * address: 四川成都
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    /**
     * 判断字符串数组是否是为空
     *
     * @param str 需要验证的字符串
     * @return 返回true表示字符串为空
     */
    public static boolean isEmpty(String[] str) {
        return str == null || str.length < 1;
    }

    /**
     * 替换内容中的html标签
     *
     * @author yxl 余秀良
     * @version 1.0
     * description: 替换内容中的html标签
     * date: 2019年04月27日 上午9:47
     * address: 四川成都
     */
    public static String replaceHtmlTags(String content) {
        return isNotEmpty(content) ? content.replace(">", "&gt;").replace("<", "&lt;") : null;
    }
}
